package com.example.mykotlin.base.util

import jakarta.validation.ConstraintValidator
import jakarta.validation.ConstraintValidatorContext
import java.lang.reflect.Method

class EnumValidator : ConstraintValidator<Ev, Any> {
    private var annotation: Ev? = null

    override fun initialize(ev: Ev) {
        this.annotation = ev;
    }

    // 重写isValid方法，用于验证约束的有效性
    // 参数: value: 需要验证的值，context: 约束验证上下文
    override fun isValid(value: Any?, context: ConstraintValidatorContext?): Boolean {
        // 如果值为null，返回true，表示约束有效
        if (value == null) {
            return true
        }
        try {
            // 获取枚举类的java类
            val anyClass = annotation!!.enumClass.java
            // 获取枚举类的枚举常量
            val objects = anyClass.enumConstants
            // 获取枚举类的方法
            val method: Method = anyClass.getMethod(annotation!!.method)
            // 遍历枚举常量
            for (o in objects) {
                // 如果值等于方法的返回值，返回true，表示约束有效
                if (value.toString() == method.invoke(o).toString()) {
                    return true
                }
            }
        } catch (e: Exception) {
            // 如果出现异常，返回true，表示约束有效
            return true
        }
        // 如果遍历完枚举常量后仍然没有找到匹配的值，返回false，表示约束无效
        return false
    }

}